package br.com.tiespec.web.Filter;

import java.util.ArrayList;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class AcessoPhaseListener implements PhaseListener {

	private static final long serialVersionUID = -2394693466156919937L;

//	private Boolean mostraMsgem = false;
//	private Boolean mostraMsgemInv = false;
//	private Boolean mostraMsgemInvAjax = false;
	private ArrayList<String> urlsPermitidas;

	public AcessoPhaseListener() {
		urlsPermitidas = new ArrayList<String>();

		// Index da Aplicação
		urlsPermitidas.add("index.html");

		urlsPermitidas.add("/views/index.xhtml");
		// Página de Erro
		urlsPermitidas.add("/views/error.xhtml");
		// Esquecimento de Senha
		urlsPermitidas.add("/views/seg01/esquecimentoSenha.xhtml");
		// Processo de Solicitação de Novo Usuário - Parte I
		urlsPermitidas.add("/views/seg03/create1.xhtml");
		// Processo de Solicitação de Novo Usuário - Parte II
		urlsPermitidas.add("/views/seg03/create2.xhtml");
		// Página que Recebe o Token de Confirmação de E-Mail
		urlsPermitidas.add("/views/seg03/confirma.xhtml");
		// Página de Fale Conosco
		urlsPermitidas.add("/views/seg10/show.xhtml");
	}

	@Override
	public void afterPhase(PhaseEvent arg0) {
//		Boolean deslogado = false;
//		mostraMsgemInv = false;
//
//		if (mostraMsgemInvAjax) {
//			Util.redirecionar("/views/index.xhtml");
//			return;
//		}
//		try {
//			deslogado = (Boolean) Util.getSessionUsuarioLogado().getAttribute("deslogado");
//		} catch (Exception e) {
//			// antes do login na aplicação o atributo deslogado não existe na
//			// sessão
//		}
//		try {
//			if (deslogado != null && deslogado) {
//				mostraMsgemInv = true;
//				mostraMsgemInvAjax = true;
//				// aqui voce pode encerrar o login do usuario como encerramento
//				// forçado
//				Util.redirecionar("/views/index.xhtml");
//				Util.getSessionUsuarioLogado().invalidate();
//				return;
//			}
//		} catch (Exception e) {
//		}
//		mostraMsgem = false;
//		String pagina = arg0.getFacesContext().getViewRoot().getViewId();
//		if (pagina == null) {
//			mostraMsgem = false;
//			return;
//		}
//		if (urlsPermitidas.contains(pagina)) {
//			mostraMsgem = false;
//			return;
//		}
//		try {
//			Usuario usuario = Util.getUsuarioLogado();
//			if (usuario == null || usuario.getId() == null) {
//				mostraMsgem = true;
//				Util.redirecionar("/views/index.xhtml");
//			}
//		} catch (NullPointerException e) {
//			mostraMsgem = true;
//			Util.redirecionar("/views/index.xhtml");
//		}
	}

	@Override
	public void beforePhase(PhaseEvent arg0) {
//		if (mostraMsgemInv) {
//			MsgUtil.msgWarnInter("SessaoInvalida");
//		}
//		if (mostraMsgem) {
//			MsgUtil.msgWarnInter("SemPermissaoAcesso");
//		}
//		if (!mostraMsgemInv && mostraMsgemInvAjax) {
//			MsgUtil.msgWarnInter("SessaoInvalida");
//			mostraMsgemInvAjax = false;
//		}
	}

	@Override
	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}
